home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 20 / 5 / DISK2058.ZIP / UNFAST.EXE / PURGE.F < prev    next >
Text File  |  1980-01-01  |  4KB  |  242 lines

  1.  
  2. ;===========================================================================
  3. ;    Program to display files in Alphabetical Order - VIEW/DELETE
  4. ;===========================================================================
  5.  
  6. #short
  7. work ? 2000
  8. filem ? 16*1000+16
  9. filee=filem+16000
  10.  
  11. unsigned m
  12. var32 fsize
  13. var files,totalk
  14.  
  15. #include fsort.fi
  16.  
  17. on error
  18.     {
  19.     cursor 24,0
  20.     print bios
  21.     if error<>999 then error msg "\dos.err":print bios "!"
  22.     stop
  23.     }
  24.  
  25. proc display(dy)
  26.     {
  27.     y=(dy/23)*23
  28.     m=filem+y*16
  29.     for d=2 to 24
  30.     colour 15:if y=dy then colour 120:cursor d,0
  31.     locate d,0
  32.     if y>=files then
  33.         {
  34.         fill 40 from video|locpos with 0720h
  35.         goto nextd
  36.         }
  37.     if peekb (m+13) then print "√ "; else print "  ";
  38.     x=printm m,20
  39.     locate d,20
  40.     nn=peek (m+14)
  41.     nd=digits nn
  42.     if nd<>5 then repeat 5-nd print " ";
  43.     print nn;"k  ";
  44.     m+=16
  45.     y++
  46.     nextd:
  47.     next d
  48.     colour 7
  49.     locate 3,50:print files;" Files, ";totalk;"K    ";
  50.     locate 6,50:print "Enter=Select/Unselect File";
  51.     locate 7,50:print "F1 Select ALL Files";
  52.     locate 8,50:print "F2 Unselect ALL Files";
  53.     locate 10,50:print "V=View Highlighted File";
  54.     locate 11,50:print "D=Delete Selected File(s)";
  55.     }
  56.  
  57. proc setf(sf)
  58.     {
  59.     m=filem
  60.     repeat files
  61.     {
  62.     pokeb m+13,sf
  63.     m+=16
  64.     }
  65.     }
  66.  
  67. function confirm
  68.     {
  69.     open window wconfirm
  70.     cursor 17,62
  71.     wait for keypressed
  72.     close window
  73.     if (lcase key)<>'y' then return 0
  74.     return 1
  75.  
  76.     wconfirm:
  77.     datab 0,0,40,15,67,19,15
  78.     datab 22,2,2,'Press Y to confirm [ ]'
  79.     datab 26
  80.     }
  81.  
  82. proc delete_selected
  83.     {
  84.     open window wdelete
  85.     dsm=filem:dsy=0
  86.     wy=13
  87.  
  88.     repeat files
  89.     {
  90.     #long
  91.     if peekb (dsm+13) then
  92.         {
  93.         #short
  94.         display(dsy)
  95.         #errors off
  96.         wm=dsm:locate wy,42
  97.         while peekb wm print chr peekb wm;:wm++
  98.         delete dsm
  99.         #errors on
  100.         if error then
  101.         {
  102.         print " ";
  103.         loctocur
  104.         error msg "\dos.err"
  105.         print bios "!";
  106.         deleted=0
  107.         }
  108.         else
  109.         {
  110.         print " deleted ok.";
  111.         totalk-=peek (dsm+14)
  112.         files--
  113.         moveb filee-dsm from dsm+16 to dsm
  114.         deleted=1
  115.         }
  116.         wy++
  117.         if wy>23 then
  118.         {
  119.         scroll 41,13,78,23,1
  120.         wy=23
  121.         }
  122.         if deleted then goto fdeleted
  123.         }
  124.     dsm+=16
  125.     dsy++
  126.     fdeleted:
  127.     }
  128.  
  129.     locate wy,42:print "Press any key...";
  130.     loctocur
  131.     wait for keyscan
  132.     close window
  133.     return
  134.  
  135.     wdelete:
  136.     datab 0,0,40,12,79,24,7,26
  137.     }
  138.  
  139. proc clear_bot scroll 0,2,79,24,0
  140.  
  141. proc view(m)
  142.     {
  143.     #errors off
  144.     open #1,m
  145.     if error then beep:return
  146.     r=work+read #1,2000 to work
  147.     close #1
  148.     #errors on
  149.  
  150.     clear_bot
  151.     y=2:m=work
  152.     while (y<25) and (m<r)
  153.     {
  154.     locate y,0
  155.     m=printm m,80
  156.     if peekb m=26 then m++    ;skip eof
  157.     y++
  158.     }
  159.     wait for keyscan
  160.     clear_bot
  161.     }
  162.  
  163. ;== Start ==================================================================
  164.  
  165. print bios "PURGE: File Viewer and Deleter. (c) Peter Campbell 1990" cr lf
  166.  
  167. nm=81h
  168. while peekb nm<>13
  169.     {
  170.     if peekb nm>' ' then
  171.     {
  172.     move 10 from nm to fscan
  173.     m=searchb 20 from fscan for 13
  174.     if m then pokeb m,0
  175.     goto scanning
  176.     }
  177.     nm++
  178.     }
  179.  
  180. scanning:
  181. m=fscan
  182. print bios "Scanning Files... ";
  183. while peekb m print bios chr peekb m;:m++
  184.  
  185. m=filem:files=0:totalk=0
  186. find first fscan:goto entry
  187.  
  188. while files<1000
  189.     {
  190.     #errors off
  191.     find next
  192.     #errors on
  193.     entry:
  194.     if error then goto purge
  195.  
  196.     moveb 13 from dta segment|dta offset+30 to m
  197.     fsize=peek dta segment|(dta offset+1ah)
  198.     fsize=(fsize+1023)/1024
  199.     pokeb m+13,0    ;not selected
  200.     poke m+14,low fsize
  201.     totalk+=low fsize
  202.  
  203.     m+=16
  204.     files++
  205.     }
  206.  
  207. purge:
  208. x=sort(reg cs,filem,16,files)
  209. cls:locate 0,0
  210. colour 15
  211. print "PURGE: File Viewer and Deleter. (c) Peter Campbell 1990."
  212. colour 7
  213. repeat 80 print "─";
  214.  
  215. fy=0
  216.  
  217. forever
  218.     {
  219.     display(fy)
  220.     if files=0 then error 18
  221.     wait for keypressed
  222.     m=filem+fy*16
  223.     ks=keyscan:k=lcase low ks:s=high ks
  224.     if s=1 then error 999
  225.  
  226.     if k=13 then pokeb m+13,not peekb (m+13):fy++
  227.     if k='d' then if confirm then delete_selected
  228.     if k='v' then view(m)
  229.  
  230.     if s=72 then fy--
  231.     if s=80 then fy++
  232.     if s=73 then fy-=23
  233.     if s=81 then fy+=23
  234.     if (s=71) or (fy<0) then fy=0
  235.     if (s=79) or (fy>=files) then fy=files-1
  236.     if ks=15104 then setf(1)
  237.     if ks=15360 then setf(0)
  238.     }
  239.  
  240. fscan: fname '*.*'
  241. space 20
  242.